﻿#include "Generation/Utilities/BucketQueue.h"

// template <typename T>
// void BucketQueue<T>::Reset()
// {
// 	// m_Buckets->Empty();
// }
//
// template <typename T>
// BucketQueue<T>::BucketQueue(int a)
// {
// 	// m_Buckets = new TArray<TArray<T>>();
// }
//
// template <typename T>
// void BucketQueue<T>::Add(T value, int cost)
// {
// 	// // 先要知道当前桶队列中，最短的短板是哪个，是新来的还是老的。
// 	// m_BucketMin = FMath::Min(m_BucketMin, cost);
// 	//
// 	// // 根据cost的最大值及历史最大值，决定 m_Buckets 的数量。
// 	// // 而 m_BucketMin 的位置，是最小的有值的地方。
// 	// // Grow the bucket array if needed.
// 	// int distance = cost + 1 - m_Buckets->Num();
// 	// while (distance > 0)
// 	// {
// 	// 	m_Buckets->Emplace(nullptr);
// 	// 	--distance;
// 	// }
// 	//
// 	// // 往这个相同优先级的队列中加入 value
// 	// // Find the bucket, or create it if needed.
// 	// auto bucket = (*m_Buckets)[cost];
// 	// if (bucket == nullptr)
// 	// {
// 	// 	bucket = new TArray<T>();
// 	// 	(*m_Buckets)[cost] = bucket;
// 	// }
// 	//
// 	// bucket.Push(value);
// }
//
// /// Removes the best item from the queue or returns `null` if the queue is
// /// empty.
// template <typename T>
// T* BucketQueue<T>::RemoveNext()
// {
// 	return nullptr;
// 	// // Advance past any empty buckets.
// 	// // 满足两点才会加：1.m_BucketMin比总长度小 2.m_BucketMin位置是空的，那么加
// 	// while (m_BucketMin < m_Buckets->Num() &&
// 	// 	   ((*m_Buckets)[m_BucketMin] == nullptr || (*m_Buckets)[m_BucketMin]->Num() == 0))
// 	// {
// 	// 	m_BucketMin++;
// 	// }
// 	//
// 	// // If we ran out of buckets, the queue is empty.
// 	// // 过了，直接返回
// 	// if (m_BucketMin >= m_Buckets->Num())
// 	// {
// 	// 	//Debug.LogError("有错误！！越界");
// 	// 	return nullptr;
// 	// }
// 	//
// 	// return &((*m_Buckets)[m_BucketMin]).Pop();
// }
